#define _CRT_SECURE_NO_WARNINGS 1

// 调试技巧
// F9 用来创建断点和取消断点
// F5 启动调试，经常用来直接跳到下一个断点处，一般是和F9一起使用
// F10逐过程，通常用来处理一个过程，一个过程可以是一次函数使用，或者是一条语句
// F11逐语句，就是每次都执行一条语句，但是可以让我们进入函数内部，在函数调用的地方
// 若想进入函数观察细节，就用F11，而不是用F10直接完成函数使用
// CTRL + F5开始执行不调试

//#include <stdio.h>
//void test()
//{
//	printf("test\n");
//}
//
//int main()
//{
//	printf("hehe\n");
//	printf("hehe\n");
//	printf("hehe\n");
//	printf("hehe\n");
//	test();
//	printf("hehe\n");
//	printf("hehe\n");
//	printf("hehe\n");
//	printf("hehe\n");
//
//	return 0;
//}

//#include <stdio.h>
//
//int main()
//{
//	int i = 0;
//	for (i = 0; i < 10; i++) {
//		printf("%d ", i);
//	}
//
//	return 0;
//}

// 注意内存中的数据以16进制展示
//// 数据在内存中存储的时候，都是按照二进制来存储的
//#include <stdio.h>
//
//int main()
//{
//	int arr[10] = { 0 };
//	int num = 100;
//	char c = 'w';
//
//	int i = 0;
//	for (i = 0; i < 10; i++) {
//		arr[i] = i;
//	}
//
//	return 0;
//}

// 在VS2022，X86，Debug的环境下

//#include <stdio.h>
//
//int main()
//{
//	int i = 0;
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//
//	for (i = 0; i <= 12; i++)
//	{
//		arr[i] = 0;
//		printf("hehe\n"); // 无限循环
//	}
//
//	return 0;
//}
// 本质上原因是因为局部变量i和arr存储在栈区，而栈区内存的使用习惯是从高到低
// 所以变量i的地址是较大的，而数组在内存中的存储规则是
// 随着下标的增大，地址从低到高变化，因此越界的话，就有可能访问到i
// 至于刚好差两个整形空间，即八个字节，这就跟编译器和环境有关
// 这个例子能够体会到调试的重要性，才能观察到程序内部执行的的细节

// 调试的时候，数组进入函数内部只能显示第一个，编译器设置
// 这时候用arr，n即可
// 调试要动手去练！！！



